package com.atguigu.auth.utils;

import com.atguigu.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

public class MenuHelper {


    /**
     * 使用递归方法构建菜单
     * @param sysMenusList
     * @return
     */
    public static List<SysMenu> buildTree(List<SysMenu> sysMenusList) {

        // 创建list集合，用于最终数据
        List<SysMenu> trees = new ArrayList<>();

        //将所有菜单数据进行遍历
        for (SysMenu sysMenu : sysMenusList) {
            //找到父节点的入口
            if(sysMenu.getParentId().longValue() == 0){
                //找到父节点后，递归查找子节点
                trees.add(findChildren(sysMenu,sysMenusList));
            }
        }

        return trees;
    }

    /**
     * 子节点进行递归
     * @param sysMenu   根据这个数据需要查找下个的数据对象
     * @param sysMenusList  所有的数据
     * @return
     */
    private static SysMenu findChildren(SysMenu sysMenu,
                                        List<SysMenu> sysMenusList) {
        sysMenu.setChildren(new ArrayList<SysMenu>());
        //遍历所有菜单数据，判断id和parentId对应的关系

        for (SysMenu menu : sysMenusList) {
            //遍历所有菜单数据，判断id和parentId对应关系
            if(sysMenu.getId().longValue()== menu.getParentId().longValue()){
                //如果最后为null说明已经没有了下级菜单
               if (sysMenu.getChildren() == null){
                   sysMenu.setChildren(new ArrayList<>());
               }
                //如果相等就继续向下查找
                sysMenu.getChildren().add(findChildren(menu,sysMenusList));
            }
        }
        return sysMenu;
    }
}
